// Copyright 2016 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT

// For each function in the vDSO ABI, define a symbol in the linker script
// pointing to its address.  The vDSO is loaded immediately after the
// userboot DSO image's last page, which is found by aligning the magic
// symbol _end (generated by the linker) up to the next page boundary.  So
// these symbols tell the linker where each vDSO function will be found at
// runtime.  The userboot code uses normal calls to these, declared as have
// hidden visibility so they won't generate PLT entries.  This results in
// the userboot binary having simple PC-relative calls to addresses outside
// its own image, to where the vDSO will be found at runtime.
#define FUNCTION(name, address, size) \
  PROVIDE_HIDDEN(name = ALIGN(_end, CONSTANT(MAXPAGESIZE)) + address);

#define WEAK_FUNCTION(name, address, size) FUNCTION(name, address, size)
