Loading...
other-tools/prune_trie.cpp dyld-1340 /dev/null
--- dyld/dyld-1340/other-tools/prune_trie.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2024 Apple Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * "Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.0 (the 'License').  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License."
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-
-#include <stddef.h>
-
-#include <vector>
-
-#include "ExportsTrie.h"
-#include "Symbol.h"
-#include "ExportsTrieWriter.h"
-
-#include "cctools_helpers.h"
-
-
-using mach_o::ExportsTrie;
-using mach_o::ExportsTrieWriter;
-using mach_o::Symbol;
-using mach_o::Error;
-
-VIS_HIDDEN
-const char* prune_trie(uint8_t* trie_start, uint32_t trie_start_size,
-                        int (*remove)(const char* symbolName), uint32_t* trie_new_size)
-{
-    ExportsTrie inputTrie(trie_start, trie_start_size);
-    if ( Error err = inputTrie.valid(0x0, 0x100000000) )
-        return strdup(err.message()); // freed by caller
-
-    // built new trie from existing, filtering out some symbols
-    __block bool removedSomething = false;
-    ExportsTrieWriter newTrie(inputTrie, ^(const Symbol& symbol) {
-        if ( remove(symbol.name().c_str()) != 0 ) {
-            removedSomething = true;
-            return true;
-        }
-        return false;
-    });
-
-    // special case when nothing removed, to leave buffer as-is
-    if ( !removedSomething ) {
-        *trie_new_size = (uint32_t)trie_start_size;
-        return NULL;
-    }
-
-    // get info about new trie buffer
-    size_t          newTrieSize;
-    const uint8_t*  newTrieBuffer = newTrie.bytes(newTrieSize);
-
-    // Need to align trie to 8 or 4 bytes.  We don't know the arch, but if the incoming trie
-    // was not 8-byte aligned, then it can't be a 64-bit arch, so use 4-byte alignement.
-    uint8_t triePadding = 0;
-    if ( (trie_start_size % 8) != 0 ) {
-        if ( (newTrieSize % 4) != 0 )
-            triePadding = 4 - (newTrieSize % 4);
-    }
-    else {
-        if ( (newTrieSize % 8) != 0 )
-            triePadding = 8 - (newTrieSize % 8);
-    }
-
-    // sanity check it is same size or smaller than input buffer
-    if ( newTrieSize+triePadding > trie_start_size ) {
-        char* msg;
-        asprintf(&msg, "new trie is larger (%ld) than original (%d)", newTrieSize, trie_start_size);
-        return msg;
-    }
-
-    // copy new trie into input buffer
-    memcpy(trie_start, newTrieBuffer, newTrieSize);
-    if ( triePadding != 0 )
-        bzero(trie_start+newTrieSize, triePadding);
-    *trie_new_size = (uint32_t)(newTrieSize+triePadding);
-
-    return NULL;
-}