Skip to content

Commit

Permalink
Fix write_elf for common symbols & only write filename in file symbol
Browse files Browse the repository at this point in the history
  • Loading branch information
encounter committed Aug 8, 2023
1 parent e802b61 commit e215b6d
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions src/util/elf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -393,8 +393,15 @@ pub fn write_elf(obj: &ObjInfo) -> Result<Vec<u8>> {
let mut num_local = 0;

// Add file symbol
let obj_name;
if !obj.name.is_empty() {
let name_index = writer.add_string(obj.name.as_bytes());
// Only write filename
obj_name = Path::new(&obj.name)
.file_name()
.map(|s| s.to_string_lossy().to_string())
.unwrap_or_else(|| obj.name.clone());

let name_index = writer.add_string(obj_name.as_bytes());
let index = writer.reserve_symbol_index(None);
out_symbols.push(OutSymbol {
index,
Expand Down Expand Up @@ -462,13 +469,7 @@ pub fn write_elf(obj: &ObjInfo) -> Result<Vec<u8>> {
let st_type = match symbol.kind {
ObjSymbolKind::Unknown => elf::STT_NOTYPE,
ObjSymbolKind::Function => elf::STT_FUNC,
ObjSymbolKind::Object => {
if symbol.flags.is_common() {
elf::STT_COMMON
} else {
elf::STT_OBJECT
}
}
ObjSymbolKind::Object => elf::STT_OBJECT,
ObjSymbolKind::Section => elf::STT_SECTION,
};
let st_bind = if symbol.flags.is_weak() {
Expand All @@ -483,6 +484,8 @@ pub fn write_elf(obj: &ObjInfo) -> Result<Vec<u8>> {
st_other: if symbol.flags.is_hidden() { elf::STV_HIDDEN } else { elf::STV_DEFAULT },
st_shndx: if section_index.is_some() {
0
} else if symbol.flags.is_common() {
elf::SHN_COMMON
} else if symbol.address != 0 {
elf::SHN_ABS
} else {
Expand Down

0 comments on commit e215b6d

Please sign in to comment.