mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
8ccd44da5c
We need .symtab_shndxr if and only if a symbol references a section with an index >= 0xff00. The old code was trying to figure out if the section was needed ahead of time, making it a fairly dependent on the code actually writing the table. It was also somewhat conservative and would create the section in cases where it was not needed. If I remember correctly, the old structure was there so that the sections were created in the same order gas creates them. That was valuable when MC's support for ELF was new and we tested with elf-dump.py. This patch refactors the symbol table creation to another class and makes it obvious that .symtab_shndxr is really only created when we are about to output a reference to a section index >= 0xff00. While here, also improve the tests to use macros. One file is one section short of needing .symtab_shndxr, the second one has just the right number. llvm-svn: 204769
107 lines
2.1 KiB
ArmAsm
107 lines
2.1 KiB
ArmAsm
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t
|
|
// RUN: llvm-readobj -s %t | FileCheck --check-prefix=SECTIONS %s
|
|
// RUN: llvm-readobj -t %t | FileCheck --check-prefix=SYMBOLS %s
|
|
|
|
// Test that we don't create a .symtab_shndx since we are one section short of
|
|
// SHN_LORESERVE (0xFF00).
|
|
|
|
// SECTIONS-NOT: Name: .symtab_shndx
|
|
|
|
// Check the last referenced section.
|
|
|
|
// SYMBOLS: Name: dm (0)
|
|
// SYMBOLS-NEXT: Value: 0x0
|
|
// SYMBOLS-NEXT: Size: 0
|
|
// SYMBOLS-NEXT: Binding: Local (0x0)
|
|
// SYMBOLS-NEXT: Type: Section (0x3)
|
|
// SYMBOLS-NEXT: Other: 0
|
|
// SYMBOLS-NEXT: Section: dm (0xFEFF)
|
|
// SYMBOLS-NEXT: }
|
|
// SYMBOLS-NEXT:]
|
|
|
|
.macro gen_sections4 x
|
|
.section a\x
|
|
.section b\x
|
|
.section c\x
|
|
.section d\x
|
|
.endm
|
|
|
|
.macro gen_sections8 x
|
|
gen_sections4 a\x
|
|
gen_sections4 b\x
|
|
.endm
|
|
|
|
.macro gen_sections16 x
|
|
gen_sections8 a\x
|
|
gen_sections8 b\x
|
|
.endm
|
|
|
|
.macro gen_sections32 x
|
|
gen_sections16 a\x
|
|
gen_sections16 b\x
|
|
.endm
|
|
|
|
.macro gen_sections64 x
|
|
gen_sections32 a\x
|
|
gen_sections32 b\x
|
|
.endm
|
|
|
|
.macro gen_sections128 x
|
|
gen_sections64 a\x
|
|
gen_sections64 b\x
|
|
.endm
|
|
|
|
.macro gen_sections256 x
|
|
gen_sections128 a\x
|
|
gen_sections128 b\x
|
|
.endm
|
|
|
|
.macro gen_sections512 x
|
|
gen_sections256 a\x
|
|
gen_sections256 b\x
|
|
.endm
|
|
|
|
.macro gen_sections1024 x
|
|
gen_sections512 a\x
|
|
gen_sections512 b\x
|
|
.endm
|
|
|
|
.macro gen_sections2048 x
|
|
gen_sections1024 a\x
|
|
gen_sections1024 b\x
|
|
.endm
|
|
|
|
.macro gen_sections4096 x
|
|
gen_sections2048 a\x
|
|
gen_sections2048 b\x
|
|
.endm
|
|
|
|
.macro gen_sections8192 x
|
|
gen_sections4096 a\x
|
|
gen_sections4096 b\x
|
|
.endm
|
|
|
|
.macro gen_sections16384 x
|
|
gen_sections8192 a\x
|
|
gen_sections8192 b\x
|
|
.endm
|
|
|
|
.macro gen_sections32768 x
|
|
gen_sections16384 a\x
|
|
gen_sections16384 b\x
|
|
.endm
|
|
|
|
gen_sections32768 a
|
|
gen_sections16384 b
|
|
gen_sections8192 c
|
|
gen_sections4096 d
|
|
gen_sections2048 e
|
|
gen_sections1024 f
|
|
gen_sections512 g
|
|
gen_sections128 h
|
|
gen_sections64 i
|
|
gen_sections32 j
|
|
gen_sections16 k
|
|
gen_sections8 l
|
|
gen_sections4 m
|