📄 sysv4.h
字号:
On the rs6000, we must keep the backchain up to date. In order to simplify things, always allocate 16 bytes for a push (System V wants to keep stack aligned to a 16 byte boundary). */#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \do { \ if (DEFAULT_ABI == ABI_V4) \ asm_fprintf (FILE, \ (TARGET_32BIT \ ? "\t{stu|stwu} %s,-16(%s)\n\t{st|stw} %s,12(%s)\n" \ : "\tstdu %s,-32(%s)\n\tstd %s,24(%s)\n"), \ reg_names[1], reg_names[1], reg_names[REGNO], \ reg_names[1]); \} while (0)/* This is how to output an insn to pop a register from the stack. It need not be very fast code. */#define ASM_OUTPUT_REG_POP(FILE, REGNO) \do { \ if (DEFAULT_ABI == ABI_V4) \ asm_fprintf (FILE, \ (TARGET_32BIT \ ? "\t{l|lwz} %s,12(%s)\n\t{ai|addic} %s,%s,16\n" \ : "\tld %s,24(%s)\n\t{ai|addic} %s,%s,32\n"), \ reg_names[REGNO], reg_names[1], reg_names[1], \ reg_names[1]); \} while (0)/* Switch Recognition by gcc.c. Add -G xx support. *//* Override svr4.h definition. */#undef SWITCH_TAKES_ARG#define SWITCH_TAKES_ARG(CHAR) \ ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o' \ || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \ || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \ || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \ || (CHAR) == 'B' || (CHAR) == 'b' || (CHAR) == 'G')/* Output .file. *//* Override elfos.h definition. */#undef ASM_FILE_START#define ASM_FILE_START(FILE) \do { \ output_file_directive ((FILE), main_input_filename); \ rs6000_file_start (FILE, TARGET_CPU_DEFAULT); \} while (0)extern int fixuplabelno;/* Handle constructors specially for -mrelocatable. */#define TARGET_ASM_CONSTRUCTOR rs6000_elf_asm_out_constructor#define TARGET_ASM_DESTRUCTOR rs6000_elf_asm_out_destructor/* This is the end of what might become sysv4.h. *//* Use DWARF 2 debugging information by default. */#undef PREFERRED_DEBUGGING_TYPE#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG/* Historically we have also supported stabs debugging. */#define DBX_DEBUGGING_INFO/* If we are referencing a function that is static or is known to be in this file, make the SYMBOL_REF special. We can use this to indicate that we can branch to this function without emitting a no-op after the call. For real AIX calling sequences, we also replace the function name with the real name (1 or 2 leading .'s), rather than the function descriptor name. This saves a lot of overriding code to read the prefixes. */#undef ENCODE_SECTION_INFO#define ENCODE_SECTION_INFO(DECL) rs6000_encode_section_info (DECL)/* The ELF version doesn't encode [DS] or whatever at the end of symbols. */#define RS6000_OUTPUT_BASENAME(FILE, NAME) \ assemble_name (FILE, NAME)/* This macro gets just the user-specified name out of the string in a SYMBOL_REF. Discard a leading * or @. */#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \do { \ const char *_name = SYMBOL_NAME; \ while (*_name == '*' || *_name == '@') \ _name++; \ (VAR) = _name; \} while (0)/* This is how to output a reference to a user-level label named NAME. `assemble_name' uses this. *//* Override elfos.h definition. */#undef ASM_OUTPUT_LABELREF#define ASM_OUTPUT_LABELREF(FILE,NAME) \do { \ const char *_name = NAME; \ if (*_name == '@') \ _name++; \ \ if (*_name == '*') \ fprintf (FILE, "%s", _name + 1); \ else \ asm_fprintf (FILE, "%U%s", _name); \} while (0)/* But, to make this work, we have to output the stabs for the function name *first*... */#define DBX_FUNCTION_FIRST/* This is the end of what might become sysv4dbx.h. */#ifndef TARGET_VERSION#define TARGET_VERSION fprintf (stderr, " (PowerPC System V.4)");#endif#ifndef CPP_PREDEFINES#define CPP_PREDEFINES \ "-DPPC -Dunix -D__svr4__ -Asystem=unix -Asystem=svr4 -Acpu=powerpc -Amachine=powerpc"#endif/* Pass various options to the assembler. *//* Override svr4.h definition. */#undef ASM_SPEC#define ASM_SPEC "%(asm_cpu) \%{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \%{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} \%{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} \%{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian} \%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ %{mcall-freebsd: -mbig} \ %{mcall-i960-old: -mlittle} \ %{mcall-linux: -mbig} \ %{mcall-gnu: -mbig} \ %{mcall-netbsd: -mbig} \}}}}"#define CC1_ENDIAN_BIG_SPEC ""#define CC1_ENDIAN_LITTLE_SPEC "\%{!mstrict-align: %{!mno-strict-align: \ %{!mcall-i960-old: \ -mstrict-align \ } \}}"#define CC1_ENDIAN_DEFAULT_SPEC "%(cc1_endian_big)"/* Pass -G xxx to the compiler and set correct endian mode. */#define CC1_SPEC "%{G*} \%{mlittle: %(cc1_endian_little)} %{!mlittle: %{mlittle-endian: %(cc1_endian_little)}} \%{mbig: %(cc1_endian_big)} %{!mbig: %{mbig-endian: %(cc1_endian_big)}} \%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ %{mcall-aixdesc: -mbig %(cc1_endian_big) } \ %{mcall-freebsd: -mbig %(cc1_endian_big) } \ %{mcall-i960-old: -mlittle %(cc1_endian_little) } \ %{mcall-linux: -mbig %(cc1_endian_big) } \ %{mcall-gnu: -mbig %(cc1_endian_big) } \ %{mcall-netbsd: -mbig %(cc1_endian_big) } \ %{!mcall-aixdesc: %{!mcall-freebsd: %{!mcall-i960-old: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: \ %(cc1_endian_default) \ }}}}}} \}}}} \%{mno-sdata: -msdata=none } \%{meabi: %{!mcall-*: -mcall-sysv }} \%{!meabi: %{!mno-eabi: \ %{mrelocatable: -meabi } \ %{mcall-freebsd: -mno-eabi } \ %{mcall-i960-old: -meabi } \ %{mcall-linux: -mno-eabi } \ %{mcall-gnu: -mno-eabi } \ %{mcall-netbsd: -mno-eabi }}} \%{msdata: -msdata=default} \%{mno-sdata: -msdata=none} \%{profile: -p}"/* Don't put -Y P,<path> for cross compilers. */#ifndef CROSS_COMPILE#define LINK_PATH_SPEC "\%{!R*:%{L*:-R %*}} \%{!nostdlib: %{!YP,*: \ %{compat-bsd: \ %{p:-Y P,/usr/ucblib:/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ %{!p:-Y P,/usr/ucblib:/usr/ccs/lib:/usr/lib}} \ %{!R*: %{!L*: -R /usr/ucblib}} \ %{!compat-bsd: \ %{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ %{!p:-Y P,/usr/ccs/lib:/usr/lib}}}}"#else#define LINK_PATH_SPEC ""#endif/* Default starting address if specified. */#define LINK_START_SPEC "\%{mads: %(link_start_ads) } \%{myellowknife: %(link_start_yellowknife) } \%{mmvme: %(link_start_mvme) } \%{msim: %(link_start_sim) } \%{mcall-freebsd: %(link_start_freebsd) } \%{mcall-linux: %(link_start_linux) } \%{mcall-gnu: %(link_start_gnu) } \%{mcall-netbsd: %(link_start_netbsd) } \%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-gnu: \ %{!mcall-netbsd: %{!mcall-freebsd: %(link_start_default) }}}}}}}}"#define LINK_START_DEFAULT_SPEC ""/* Override svr4.h definition. */#undef LINK_SPEC#define LINK_SPEC "\%{h*} %{v:-V} %{!msdata=none:%{G*}} %{msdata=none:-G0} \%{YP,*} %{R*} \%{Qy:} %{!Qn:-Qy} \%(link_shlib) \%{!Wl,-T*: %{!T*: %(link_start) }} \%(link_target) \%(link_os)"/* For now, turn off shared libraries by default. */#ifndef SHARED_LIB_SUPPORT#define NO_SHARED_LIB_SUPPORT#endif#ifndef NO_SHARED_LIB_SUPPORT/* Shared libraries are default. */#define LINK_SHLIB_SPEC "\%{!static: %(link_path) %{!R*:%{L*:-R %*}}} \%{mshlib: } \%{static:-dn -Bstatic} \%{shared:-G -dy -z text} \%{symbolic:-Bsymbolic -G -dy -z text}"#else/* Shared libraries are not default. */#define LINK_SHLIB_SPEC "\%{mshlib: %(link_path) } \%{!mshlib: %{!shared: %{!symbolic: -dn -Bstatic}}} \%{static: } \%{shared:-G -dy -z text %(link_path) } \%{symbolic:-Bsymbolic -G -dy -z text %(link_path) }"#endif/* Override the default target of the linker. */#define LINK_TARGET_SPEC "\%{mlittle: --oformat elf32-powerpcle } %{mlittle-endian: --oformat elf32-powerpcle } \%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ %{mcall-i960-old: --oformat elf32-powerpcle} \ }}}}"/* Any specific OS flags. */#define LINK_OS_SPEC "\%{mads: %(link_os_ads) } \%{myellowknife: %(link_os_yellowknife) } \%{mmvme: %(link_os_mvme) } \%{msim: %(link_os_sim) } \%{mcall-freebsd: %(link_os_freebsd) } \%{mcall-linux: %(link_os_linux) } \%{mcall-gnu: %(link_os_gnu) } \%{mcall-netbsd: %(link_os_netbsd) } \%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: %(link_os_default) }}}}}}}}"#define LINK_OS_DEFAULT_SPEC ""#define CPP_SYSV_SPEC \"%{mrelocatable*: -D_RELOCATABLE} \%{fpic: -D__PIC__=1 -D__pic__=1} \%{!fpic: %{fPIC: -D__PIC__=2 -D__pic__=2}} \%{mlong-double-128: -D__LONG_DOUBLE_128__=1} \%{!mlong-double-64: %(cpp_longdouble_default)} \%{mcall-sysv: -D_CALL_SYSV} \%{mcall-aix: -D_CALL_AIX} %{mcall-aixdesc: -D_CALL_AIX -D_CALL_AIXDESC} \%{!mcall-sysv: %{!mcall-aix: %{!mcall-aixdesc: %(cpp_sysv_default) }}} \%{msoft-float: -D_SOFT_FLOAT} \%{!msoft-float: %{!mhard-float: \ %{mcpu=401: -D_SOFT_FLOAT} \ %{mcpu=403: -D_SOFT_FLOAT} \ %{mcpu=405: -D_SOFT_FLOAT} \ %{mcpu=ec603e: -D_SOFT_FLOAT} \ %{mcpu=801: -D_SOFT_FLOAT} \ %{mcpu=821: -D_SOFT_FLOAT} \ %{mcpu=823: -D_SOFT_FLOAT} \ %{mcpu=860: -D_SOFT_FLOAT} \ %{!mcpu*: %(cpp_float_default) }}}"/* Whether floating point is disabled by default. */#define CPP_FLOAT_DEFAULT_SPEC ""/* Whether 'long double' is 128 bits by default. */#define CPP_LONGDOUBLE_DEFAULT_SPEC ""#define CPP_SYSV_DEFAULT_SPEC "-D_CALL_SYSV"#define CPP_ENDIAN_BIG_SPEC "-D_BIG_ENDIAN -D__BIG_ENDIAN__ -Amachine=bigendian"#define CPP_ENDIAN_LITTLE_SPEC "-D_LITTLE_ENDIAN -D__LITTLE_ENDIAN__ -Amachine=littleendian"#define CPP_ENDIAN_SPEC \"%{mlittle: %(cpp_endian_little) } \%{mlittle-endian: %(cpp_endian_little) } \%{mbig: %(cpp_endian_big) } \%{mbig-endian: %(cpp_endian_big) } \%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ %{mcall-freebsd: %(cpp_endian_big) } \ %{mcall-linux: %(cpp_endian_big) } \ %{mcall-gnu: %(cpp_endian_big) } \ %{mcall-netbsd: %(cpp_endian_big) } \ %{mcall-i960-old: %(cpp_endian_little) } \ %{mcall-aixdesc: %(cpp_endian_big) } \ %{!mcall-linux: %{!mcall-gnu: %{!mcall-freebsd: %{!mcall-netbsd: %{!mcall-aixdesc: %(cpp_endian_default) }}}}}}}}}"#define CPP_ENDIAN_DEFAULT_SPEC "%(cpp_endian_big)"/* Override rs6000.h definition. */#undef CPP_SPEC#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_sysv) %(cpp_endian) %(cpp_cpu) \%{mads: %(cpp_os_ads) } \%{myellowknife: %(cpp_os_yellowknife) } \%{mmvme: %(cpp_os_mvme) } \%{msim: %(cpp_os_sim) } \%{mcall-freebsd: %(cpp_os_freebsd) } \%{mcall-linux: %(cpp_os_linux) } \%{mcall-gnu: %(cpp_os_gnu) } \%{mcall-netbsd: %(cpp_os_netbsd) } \%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: %(cpp_os_default) }}}}}}}}"#define CPP_OS_DEFAULT_SPEC ""/* Override svr4.h definition. */#undef STARTFILE_SPEC#define STARTFILE_SPEC "\%{mads: %(startfile_ads) } \%{myellowknife: %(startfile_yellowknife) } \%{mmvme: %(startfile_mvme) } \%{msim: %(startfile_sim) } \%{mcall-freebsd: %(startfile_freebsd) } \%{mcall-linux: %(startfile_linux) } \%{mcall-gnu: %(startfile_gnu) } \%{mcall-netbsd: %(startfile_netbsd) } \%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: %(startfile_default) }}}}}}}}"#define STARTFILE_DEFAULT_SPEC ""/* Override svr4.h definition. */#undef LIB_SPEC#define LIB_SPEC "\%{mads: %(lib_ads) } \%{myellowknife: %(lib_yellowknife) } \%{mmvme: %(lib_mvme) } \%{msim: %(lib_sim) } \%{mcall-freebsd: %(lib_freebsd) } \%{mcall-linux: %(lib_linux) } \%{mcall-gnu: %(lib_gnu) } \%{mcall-netbsd: %(lib_netbsd) } \%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: %(lib_default) }}}}}}}}"#define LIB_DEFAULT_SPEC ""/* Override svr4.h definition. */#undef ENDFILE_SPEC#define ENDFILE_SPEC "crtsavres.o%s \%{mads: %(endfile_ads)} \%{myellowknife: %(endfile_yellowknife)} \%{mmvme: %(endfile_mvme)} \%{msim: %(endfile_sim)} \%{mcall-freebsd: %(endfile_freebsd) } \%{mcall-linux: %(endfile_linux) } \%{mcall-gnu: %(endfile_gnu) } \%{mcall-netbsd: %(endfile_netbsd) } \%{mvxworks: %(endfile_vxworks) } \%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: %{!mvxworks: %(endfile_default) }}}}}}}}}"#define ENDFILE_DEFAULT_SPEC ""/* Motorola ADS support. */#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"#define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s"#define ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -