| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // This file defines macros to handle the output of the shlib-symbols |
| // script (run without the -a switch). These macros generate assembly |
| // code that should define symbols in a DSO such that the resultant DSO |
| // has the same ABI as the DSO input to shlib-symbols. |
| |
| #define FUNCTION(NAME, SIZE) FUNCTION_1(global, NAME) |
| #define WEAK_FUNCTION(NAME, SIZE) FUNCTION_1(weak, NAME) |
| |
| #define FUNCTION_1(BINDING, NAME) \ |
| .pushsection .text,"ax",%progbits; \ |
| .BINDING NAME; \ |
| .type NAME,%function; \ |
| NAME: .space 1; \ |
| .popsection |
| |
| #define OBJECT_1(SECTION, SECFLAGS, SECTYPE, BINDING, NAME, SIZE) \ |
| .pushsection SECTION,SECFLAGS,%SECTYPE; \ |
| .BINDING NAME; \ |
| .type NAME,%object; \ |
| NAME: .space SIZE; \ |
| .size NAME,SIZE; \ |
| .popsection |
| |
| #define RODATA_OBJECT(NAME, SIZE) \ |
| OBJECT_1(.rodata, "a", progbits, global, NAME, SIZE) |
| #define DATA_OBJECT(NAME, SIZE) \ |
| OBJECT_1(.data, "aw", progbits, global, NAME, SIZE) |
| #define WEAK_DATA_OBJECT(NAME, SIZE) \ |
| OBJECT_1(.data, "aw", progbits, weak, NAME, SIZE) |
| #define BSS_OBJECT(NAME, SIZE) \ |
| OBJECT_1(.bss, "aw", nobits, global, NAME, SIZE) |
| |
| #define UNDEFINED_WEAK(NAME, SIZE) UNDEFINED_1(weak, NAME) |
| #define UNDEFINED(NAME, SIZE) UNDEFINED_1(globl, NAME) |
| #define UNDEFINED_1(BINDING, NAME) \ |
| .pushsection .undefined,"aw",%progbits; \ |
| .BINDING NAME; \ |
| .dc.a NAME; \ |
| .popsection |