This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Issue with objcopy, removal of sections, and adjustment of unrelated sections


Hello,


I am seeing some unexpected behavior from binutils objcopy, which occurs when I attempt to remove sections from an ELF file.

This is the information on sections and headers I get when using readelf on the original ELF file:


Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .dummy_section_01 PROGBITS 70000000 1959e8 000000 00 W 0 0 1 [ 2] .text_benchmark PROGBITS 70000000 110000 01a9d0 00 AX 0 0 8 [ 3] .gap_padding_benc PROGBITS 7001a9e0 12a9e0 065620 00 WA 0 0 1 [ 4] .dummy_section_02 NOBITS 7001a9d0 12a9d0 065630 00 WA 0 0 1 [ 5] .rodata_benchmark PROGBITS 70080000 190000 0059e8 00 A 0 0 4 [ 6] .dummy_section_03 PROGBITS 00100000 1959e8 000000 00 W 0 0 1 [ 7] .text PROGBITS 00100000 008000 016f20 00 AX 0 0 64 [ 8] .blob_text PROGBITS 10000000 068000 021458 00 WA 0 0 1 [ 9] .blob_gap_padding PROGBITS 10021458 089458 07eba8 00 WA 0 0 1 [10] .blob_rodata PROGBITS 100a0000 108000 007080 00 WA 0 0 1 [11] .dummy_section_04 NOBITS 00116f20 01ef20 0690e0 00 WA 0 0 1 [12] .init PROGBITS 00180000 020000 000018 00 AX 0 0 4 [13] .dummy_section_05 NOBITS 00180018 020018 07ffe8 00 WA 0 0 1 [14] .fini PROGBITS 00200000 028000 000018 00 AX 0 0 4 [15] .dummy_section_06 NOBITS 00200018 028018 07ffe8 00 WA 0 0 1 [16] .rodata PROGBITS 00280000 030000 00732c 00 A 0 0 8 [17] .dummy_section_07 NOBITS 0028732c 03732c 078cd4 00 WA 0 0 1 [18] .dummy_section_08 PROGBITS 00300000 1959e8 000000 00 W 0 0 1 [19] .dummy_section_09 PROGBITS 00300000 1959e8 000000 00 W 0 0 1 [20] .dummy_section_10 PROGBITS 00300000 1959e8 000000 00 W 0 0 1 [21] .data PROGBITS 00300000 038000 001080 00 WA 0 0 8 [22] .dummy_section_11 NOBITS 00301080 039080 07ef80 00 WA 0 0 1 [23] .dummy_section_12 PROGBITS 00380000 1959e8 000000 00 W 0 0 1 [24] .dummy_section_13 PROGBITS 00380000 1959e8 000000 00 W 0 0 1 [25] .dummy_section_14 PROGBITS 00380000 1959e8 000000 00 W 0 0 1 [26] .dummy_section_15 PROGBITS 00380000 1959e8 000000 00 W 0 0 1 [27] .dummy_section_16 PROGBITS 00380000 1959e8 000000 00 W 0 0 1 [28] .eh_frame PROGBITS 00380000 040000 000004 00 A 0 0 4 [29] .dummy_section_17 NOBITS 00380004 040004 07fffc 00 WA 0 0 1 [30] .dummy_section_18 PROGBITS 00400000 1959e8 000000 00 W 0 0 1 [31] .dummy_section_19 PROGBITS 00400000 1959e8 000000 00 W 0 0 1 [32] .mmu_tbl PROGBITS 00400000 048000 004000 00 A 0 0 1 [33] .dummy_section_20 NOBITS 00404000 04c000 07c000 00 WA 0 0 1 [34] .ARM.exidx ARM_EXIDX 00480000 050000 000008 00 AL 7 0 4 [35] .dummy_section_21 NOBITS 00480008 050008 07fff8 00 WA 0 0 1 [36] .dummy_section_22 PROGBITS 00500000 1959e8 000000 00 W 0 0 1 [37] .init_array INIT_ARRAY 00500000 058000 000008 00 WA 0 0 4 [38] .dummy_section_23 NOBITS 00500008 058008 07fff8 00 WA 0 0 1 [39] .fini_array FINI_ARRAY 00580000 060000 000004 00 WA 0 0 4 [40] .dummy_section_24 NOBITS 00580004 060004 07fffc 00 WA 0 0 1 [41] .ARM.attributes ARM_ATTRIBUTES 00600000 1959e8 000033 00 0 0 1 [42] .dummy_section_25 PROGBITS 00600000 195a1b 000000 00 W 0 0 1 [43] .dummy_section_26 PROGBITS 00600000 195a1b 000000 00 W 0 0 1 [44] .dummy_section_27 PROGBITS 00600000 195a1b 000000 00 W 0 0 1 [45] .dummy_section_28 PROGBITS 00600000 195a1b 000000 00 W 0 0 1 [46] .dummy_section_29 PROGBITS 00600000 195a1b 000000 00 W 0 0 1 [47] .bss NOBITS 00600000 060004 27a66c 00 WA 0 0 4 [48] .dummy_section_30 NOBITS 0087a66c 060004 005994 00 WA 0 0 1 [49] .heap NOBITS 00880000 060004 e900000 00 WA 0 0 1 [50] .dummy_section_31 PROGBITS 0f180000 195a1b 000000 00 W 0 0 1 [51] .stack NOBITS 0f180000 060004 1001800 00 WA 0 0 1 [52] .debug_info PROGBITS 00000000 195a1b 017986 00 0 0 1 [53] .debug_abbrev PROGBITS 00000000 1ad3a1 005164 00 0 0 1 [54] .debug_loc PROGBITS 00000000 1b2505 011154 00 0 0 1 [55] .debug_aranges PROGBITS 00000000 1c3660 0007b0 00 0 0 8 [56] .debug_macro PROGBITS 00000000 1c3e10 007ea9 00 0 0 1 [57] .debug_line PROGBITS 00000000 1cbcb9 00ccc3 00 0 0 1 [58] .debug_str PROGBITS 00000000 1d897c 016c11 01 MS 0 0 1 [59] .comment PROGBITS 00000000 1ef58d 000030 01 MS 0 0 1 [60] .debug_frame PROGBITS 00000000 1ef5c0 004440 00 0 0 4 [61] .debug_ranges PROGBITS 00000000 1f3a00 000848 00 0 0 1 [62] .shstrtab STRTAB 00000000 1f4248 0003a0 00 0 0 1 [63] .symtab SYMTAB 00000000 1f5010 0071b0 10 64 994 4 [64] .strtab STRTAB 00000000 1fc1c0 00394e 00 0 0 1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

There are no section groups in this file.

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  EXIDX          0x050000 0x00480000 0x00480000 0x00008 0x00008 R   0x4
  LOAD           0x008000 0x00100000 0x00100000 0x16f20 0x80000 RWE 0x8000
  LOAD           0x020000 0x00180000 0x00180000 0x00018 0x80000 RWE 0x8000
  LOAD           0x028000 0x00200000 0x00200000 0x00018 0x80000 RWE 0x8000
  LOAD           0x030000 0x00280000 0x00280000 0x0732c 0x80000 RW  0x8000
  LOAD           0x038000 0x00300000 0x00300000 0x01080 0x80000 RW  0x8000
  LOAD           0x040000 0x00380000 0x00380000 0x00004 0x80000 RW  0x8000
  LOAD           0x048000 0x00400000 0x00400000 0x04000 0x80000 RW  0x8000
  LOAD           0x050000 0x00480000 0x00480000 0x00008 0x80000 RW  0x8000
  LOAD           0x058000 0x00500000 0x00500000 0x00008 0x80000 RW  0x8000
LOAD 0x060000 0x00580000 0x00580000 0x00004 0xfc01800 RW 0x8000 *
  LOAD           0x068000 0x10000000 0x10000000 0x21458 0x21458 RW  0x8000
  LOAD           0x089458 0x10021458 0x10021458 0x7eba8 0x7eba8 RW  0x8000
  LOAD           0x108000 0x100a0000 0x100a0000 0x07080 0x07080 RW  0x8000
  LOAD           0x110000 0x70000000 0x70000000 0x1a9d0 0x80000 RWE 0x8000
  LOAD           0x12a9e0 0x7001a9e0 0x7001a9e0 0x65620 0x65620 RW  0x8000
  LOAD           0x190000 0x70080000 0x70080000 0x059e8 0x059e8 R   0x8000


Take note of the header marked with an asterisk above.

I then execute

arm-xilinx-eabi-objcopy --remove-section .text_benchmark --remove-section .rodata_benchmark --remove-section .gap_padding_benchmark original.elf rewritten.elf

Which
a) gives me the following I don't understand:

BFD: sjeng_blocking_sdim-textandrodata.other.elf: section .blob_text lma 0x10000000 adjusted to 0x10181800 BFD: sjeng_blocking_sdim-textandrodata.other.elf: section .blob_gap_padding lma 0x10021458 adjusted to 0x101a2c58 BFD: sjeng_blocking_sdim-textandrodata.other.elf: section .blob_rodata lma 0x100a0000 adjusted to 0x10221800

b) makes it so I end up with the following information on the rewritten file:


Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .dummy_section_01 PROGBITS 70000000 fd08880 000000 00 W 0 0 1 [ 2] .dummy_section_02 NOBITS 7001a9d0 fd0a9d0 065630 00 WA 0 0 1 [ 3] .dummy_section_03 PROGBITS 00100000 fd08880 000000 00 W 0 0 1 [ 4] .text PROGBITS 00100000 008000 016f20 00 AX 0 0 64 [ 5] .blob_text PROGBITS 10000000 fc61800 021458 00 WA 0 0 1 [ 6] .blob_gap_padding PROGBITS 10021458 fc82c58 07eba8 00 WA 0 0 1 [ 7] .blob_rodata PROGBITS 100a0000 fd01800 007080 00 WA 0 0 1 [ 8] .dummy_section_04 NOBITS 00116f20 01ef20 0690e0 00 WA 0 0 1 [ 9] .init PROGBITS 00180000 020000 000018 00 AX 0 0 4 [10] .dummy_section_05 NOBITS 00180018 020018 07ffe8 00 WA 0 0 1 [11] .fini PROGBITS 00200000 028000 000018 00 AX 0 0 4 [12] .dummy_section_06 NOBITS 00200018 028018 07ffe8 00 WA 0 0 1 [13] .rodata PROGBITS 00280000 030000 00732c 00 A 0 0 8 [14] .dummy_section_07 NOBITS 0028732c 03732c 078cd4 00 WA 0 0 1 [15] .dummy_section_08 PROGBITS 00300000 fd08880 000000 00 W 0 0 1 [16] .dummy_section_09 PROGBITS 00300000 fd08880 000000 00 W 0 0 1 [17] .dummy_section_10 PROGBITS 00300000 fd08880 000000 00 W 0 0 1 [18] .data PROGBITS 00300000 038000 001080 00 WA 0 0 8 [19] .dummy_section_11 NOBITS 00301080 039080 07ef80 00 WA 0 0 1 [20] .dummy_section_12 PROGBITS 00380000 fd08880 000000 00 W 0 0 1 [21] .dummy_section_13 PROGBITS 00380000 fd08880 000000 00 W 0 0 1 [22] .dummy_section_14 PROGBITS 00380000 fd08880 000000 00 W 0 0 1 [23] .dummy_section_15 PROGBITS 00380000 fd08880 000000 00 W 0 0 1 [24] .dummy_section_16 PROGBITS 00380000 fd08880 000000 00 W 0 0 1 [25] .eh_frame PROGBITS 00380000 040000 000004 00 A 0 0 4 [26] .dummy_section_17 NOBITS 00380004 040004 07fffc 00 WA 0 0 1 [27] .dummy_section_18 PROGBITS 00400000 fd08880 000000 00 W 0 0 1 [28] .dummy_section_19 PROGBITS 00400000 fd08880 000000 00 W 0 0 1 [29] .mmu_tbl PROGBITS 00400000 048000 004000 00 A 0 0 1 [30] .dummy_section_20 NOBITS 00404000 04c000 07c000 00 WA 0 0 1 [31] .ARM.exidx ARM_EXIDX 00480000 050000 000008 00 AL 4 0 4 [32] .dummy_section_21 NOBITS 00480008 050008 07fff8 00 WA 0 0 1 [33] .dummy_section_22 PROGBITS 00500000 fd08880 000000 00 W 0 0 1 [34] .init_array INIT_ARRAY 00500000 058000 000008 00 WA 0 0 4 [35] .dummy_section_23 NOBITS 00500008 058008 07fff8 00 WA 0 0 1 [36] .fini_array FINI_ARRAY 00580000 060000 000004 00 WA 0 0 4 [37] .dummy_section_24 NOBITS 00580004 060004 07fffc 00 WA 0 0 1 [38] .ARM.attributes ARM_ATTRIBUTES 00600000 fd08880 000033 00 0 0 1 [39] .dummy_section_25 PROGBITS 00600000 fd088b3 000000 00 W 0 0 1 [40] .dummy_section_26 PROGBITS 00600000 fd088b3 000000 00 W 0 0 1 [41] .dummy_section_27 PROGBITS 00600000 fd088b3 000000 00 W 0 0 1 [42] .dummy_section_28 PROGBITS 00600000 fd088b3 000000 00 W 0 0 1 [43] .dummy_section_29 PROGBITS 00600000 fd088b3 000000 00 W 0 0 1 [44] .bss NOBITS 00600000 060004 27a66c 00 WA 0 0 4 [45] .dummy_section_30 NOBITS 0087a66c 060004 005994 00 WA 0 0 1 [46] .heap NOBITS 00880000 060004 e900000 00 WA 0 0 1 [47] .dummy_section_31 PROGBITS 0f180000 fd088b3 000000 00 W 0 0 1 [48] .stack NOBITS 0f180000 060004 1001800 00 WA 0 0 1 [49] .debug_info PROGBITS 00000000 fd088b3 017986 00 0 0 1 [50] .debug_abbrev PROGBITS 00000000 fd20239 005164 00 0 0 1 [51] .debug_loc PROGBITS 00000000 fd2539d 011154 00 0 0 1 [52] .debug_aranges PROGBITS 00000000 fd364f8 0007b0 00 0 0 8 [53] .debug_macro PROGBITS 00000000 fd36ca8 007ea9 00 0 0 1 [54] .debug_line PROGBITS 00000000 fd3eb51 00ccc3 00 0 0 1 [55] .debug_str PROGBITS 00000000 fd4b814 016c11 01 MS 0 0 1 [56] .comment PROGBITS 00000000 fd62425 000030 01 MS 0 0 1 [57] .debug_frame PROGBITS 00000000 fd62458 004440 00 0 0 4 [58] .debug_ranges PROGBITS 00000000 fd66898 000848 00 0 0 1 [59] .shstrtab STRTAB 00000000 fd670e0 000367 00 0 0 1 [60] .symtab SYMTAB 00000000 fd67df8 0059d0 10 61 774 4 [61] .strtab STRTAB 00000000 fd6d7c8 002eba 00 0 0 1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

There are no section groups in this file.

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  EXIDX          0x050000 0x00480000 0x00480000 0x00008 0x00008 R   0x4
  LOAD           0x008000 0x00100000 0x00100000 0x16f20 0x80000 RWE 0x8000
  LOAD           0x020000 0x00180000 0x00180000 0x00018 0x80000 RWE 0x8000
  LOAD           0x028000 0x00200000 0x00200000 0x00018 0x80000 RWE 0x8000
  LOAD           0x030000 0x00280000 0x00280000 0x0732c 0x80000 RW  0x8000
  LOAD           0x038000 0x00300000 0x00300000 0x01080 0x80000 RW  0x8000
  LOAD           0x040000 0x00380000 0x00380000 0x00004 0x80000 RW  0x8000
  LOAD           0x048000 0x00400000 0x00400000 0x04000 0x80000 RW  0x8000
  LOAD           0x050000 0x00480000 0x00480000 0x00008 0x80000 RW  0x8000
  LOAD           0x058000 0x00500000 0x00500000 0x00008 0x80000 RW  0x8000
LOAD 0x060000 0x00580000 0x00580000 0xfca8880 0xfca8880 RW 0x8000 *
  LOAD           0xfd0a9d0 0x7001a9d0 0x7001a9d0 0x00000 0x65630 RWE 0x8000
  LOAD           0xfd08880 0x00000000 0x00000000 0x00000 0x00000 R   0x8000


Why are any sections being adjusted to new addresses?

Also, you'll note that the header marked with an asterisk suddenly has a different size. Why was it changed?

Is this a bug? Note that I am using objcopy from a third-party binutils toolchain.

Thanks in advance for any and all help!


Best regards,

Ronald De Keulenaer


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]