diff options
Diffstat (limited to 'gcc/config/pa/som.h')
-rw-r--r-- | gcc/config/pa/som.h | 95 |
1 files changed, 63 insertions, 32 deletions
diff --git a/gcc/config/pa/som.h b/gcc/config/pa/som.h index ae52cd0..d8082d8 100644 --- a/gcc/config/pa/som.h +++ b/gcc/config/pa/som.h @@ -1,5 +1,5 @@ /* Definitions for SOM assembler support. - Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1999, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GCC. @@ -129,19 +129,6 @@ do { \ #endif -/* NAME refers to the function's name. If we are placing each function into - its own section, we need to switch to the section for this function. Note - that the section name will have a "." prefix. */ -#define ASM_OUTPUT_FUNCTION_PREFIX(FILE, NAME) \ - { \ - const char *name = (*targetm.strip_name_encoding) (NAME); \ - if (TARGET_GAS && in_section == in_text) \ - fputs ("\t.NSUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY\n", FILE); \ - else if (TARGET_GAS) \ - fprintf (FILE, \ - "\t.SUBSPA .%s\n", name); \ - } - #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ do { tree fntype = TREE_TYPE (TREE_TYPE (DECL)); \ tree tree_type = TREE_TYPE (DECL); \ @@ -219,30 +206,84 @@ do { \ #define TARGET_ASM_FILE_START pa_som_file_start -/* Output before code. */ +/* Select and return a TEXT_SECTION_ASM_OP string. */ +#define TEXT_SECTION_ASM_OP som_text_section_asm_op () -/* Supposedly the assembler rejects the command if there is no tab! */ -#define TEXT_SECTION_ASM_OP "\t.SPACE $TEXT$\n\t.SUBSPA $CODE$\n" +/* Output before code in the default text section. */ +#define DEFAULT_TEXT_SECTION_ASM_OP "\t.SPACE $TEXT$\n\t.SUBSPA $CODE$" -/* Output before read-only data. */ +/* Output before text in a new subspace. This allows the linker to + place stubs between functions. */ +#define NEW_TEXT_SECTION_ASM_OP "\t.SPACE $TEXT$\n\t.NSUBSPA $CODE$" + +/* Output before text in a new one-only subspace. */ +#define ONE_ONLY_TEXT_SECTION_ASM_OP "\t.SPACE $TEXT$\n\ +\t.NSUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,SORT=24,COMDAT" -/* Supposedly the assembler rejects the command if there is no tab! */ +/* Output before read-only data. */ #define READONLY_DATA_ASM_OP "\t.SPACE $TEXT$\n\t.SUBSPA $LIT$\n" -#define EXTRA_SECTIONS in_readonly_data +/* Output before one-only readonly data. We make readonly data one only + by creating a new $LIT$ subspace in $TEXT$ with the comdat flag. */ +#define ONE_ONLY_READONLY_DATA_SECTION_ASM_OP "\t.SPACE $TEXT$\n\ +\t.NSUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=16,COMDAT\n" + +/* Output before writable data. */ +#define DATA_SECTION_ASM_OP "\t.SPACE $PRIVATE$\n\t.SUBSPA $DATA$\n" + +/* Output before one-only data. We make data one only by creating + a new $DATA$ subspace in $PRIVATE$ with the comdat flag. */ +#define ONE_ONLY_DATA_SECTION_ASM_OP "\t.SPACE $PRIVATE$\n\ +\t.NSUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31,SORT=24,COMDAT\n" + +/* Output before uninitialized data. */ +#define BSS_SECTION_ASM_OP "\t.SPACE $PRIVATE$\n\t.SUBSPA $BSS$\n" + +#define EXTRA_SECTIONS \ + in_readonly_data, \ + in_one_only_readonly_data, \ + in_one_only_data #define EXTRA_SECTION_FUNCTIONS \ -extern void readonly_data (void); \ + READONLY_DATA_FUNCTION \ + ONE_ONLY_READONLY_DATA_SECTION_FUNCTION \ + ONE_ONLY_DATA_SECTION_FUNCTION \ + FORGET_SECTION_FUNCTION + +#define READONLY_DATA_FUNCTION \ void \ readonly_data (void) \ { \ if (in_section != in_readonly_data) \ { \ in_section = in_readonly_data; \ - fprintf (asm_out_file, "%s\n", READONLY_DATA_ASM_OP); \ + fputs (READONLY_DATA_ASM_OP, asm_out_file); \ } \ +} \ + +#define ONE_ONLY_READONLY_DATA_SECTION_FUNCTION \ +void \ +one_only_readonly_data_section (void) \ +{ \ + in_section = in_one_only_readonly_data; \ + fputs (ONE_ONLY_READONLY_DATA_SECTION_ASM_OP, asm_out_file); \ +} \ + +#define ONE_ONLY_DATA_SECTION_FUNCTION \ +void \ +one_only_data_section (void) \ +{ \ + in_section = in_one_only_data; \ + fputs (ONE_ONLY_DATA_SECTION_ASM_OP, asm_out_file); \ } +#define FORGET_SECTION_FUNCTION \ +void \ +forget_section (void) \ +{ \ + in_section = no_section; \ +} \ + /* FIXME: HPUX ld generates incorrect GOT entries for "T" fixups which reference data within the $TEXT$ space (for example constant strings in the $LIT$ subspace). @@ -255,18 +296,8 @@ readonly_data (void) \ $TEXT$ space during PIC generation. Instead place all constant data into the $PRIVATE$ subspace (this reduces sharing, but it works correctly). */ - #define READONLY_DATA_SECTION (flag_pic ? data_section : readonly_data) -/* Output before writable data. */ - -/* Supposedly the assembler rejects the command if there is no tab! */ -#define DATA_SECTION_ASM_OP "\t.SPACE $PRIVATE$\n\t.SUBSPA $DATA$\n" - -/* Output before uninitialized data. */ - -#define BSS_SECTION_ASM_OP "\t.SPACE $PRIVATE$\n\t.SUBSPA $BSS$\n" - /* We must not have a reference to an external symbol defined in a shared library in a readonly section, else the SOM linker will complain. |